/*
 * 1.00 2012/09/19
 *
 * Copyright (c) 2012 Motch_bs
 * All rights reserved.
 *
 * このソフトウェアは，Motch_bsに所有される機密情報である。
 * これらの機密情報を漏洩してはならず，Motch_bs の意図する
 * 認可の元においてこれを使用すべし。
 */
package jp.co.ufp.sevendaystask_free;

import java.util.HashMap;

import jp.co.ufp.sevendaystask_free.constants.C;
import jp.co.ufp.sevendaystask_free.forms.ListTimeForm;
import jp.co.ufp.sevendaystask_free.forms.ListWeekForm;
import jp.co.ufp.sevendaystask_free.forms.QueryForm;
import jp.co.ufp.sevendaystask_free.logics.Logic001;
import jp.co.ufp.sevendaystask_free.logics.Logic010;
import jp.co.ufp.sevendaystask_free.storage.QueryManager;

import org.achartengine.GraphicalView;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Spannable;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Main extends Activity {

    // --------------------------------
    // 広告のための
    //private AdView adView;
    //private String MY_AD_UNIT_ID = "a1506b02019e366";
    // --------------------------------

    /** グラフVIEW */
    private GraphicalView mChartView;

    /** バンドルに保持する日付文字列 */
    private String mDateFormat;

    /** データベースヘルパー */
    private QueryManager queryManager;

    /** 曜日表示 */
    private TextView weekdayString;

    /** ビジネスロジック（初期化） */
    private Logic010 logic010;

    /** 今日の曜日 */
    public int position_week = -1;

    /** グラフのインデックスとデータIDの保持 */
    public HashMap<String, String> chartIndexes = new HashMap<String, String>();

    @Override
    public void onCreate(
	Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	getWindow().requestFeature(Window.FEATURE_LEFT_ICON);// アイコン表示
	setContentView(R.layout.activity_main);
	getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.ic_launcher);
	setTitle(R.string.app_name);// タイトル表示
	// データベース初期化
	queryManager = new QueryManager(this);
	logic010 = new Logic010(this, queryManager);
	logic010.initializing();
	weekdayString = (TextView) findViewById(R.id.weekdayString);
	position_week = Logic001.getTodayWeekDay();
	String weekDay = Logic001.getWeekDayString(this, position_week);
	Spannable t = Spannable.Factory.getInstance().newSpannable(weekDay);
	UnderlineSpan us = new UnderlineSpan();
	t.setSpan(us, 0, weekDay.length(), t.getSpanFlags(us));
	weekdayString.setText(t, TextView.BufferType.SPANNABLE);
	weekdayString.setTextSize(C.FONT_SIZE);
	// --------------------------------
	// *広告のための
	// *adView を作成する
	//adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID);
	// *属性 android:id="@+id/mainLayout" が与えられているものとして
	// *LinearLayout をルックアップする
	//LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);
	// *adView を追加
	//layout.addView(adView);
	// *一般的なリクエストを行って広告を読み込む
	//adView.loadAd(new AdRequest());
	// --------------------------------
    }

    @Override
    public void onDestroy() {
      //adView.destroy();
      super.onDestroy();
    }
    @Override
    public boolean onCreateOptionsMenu(
	Menu menu) {
	MenuInflater inflater = getMenuInflater();
	inflater.inflate(R.menu.activity_main_menue, menu);
	return true;
    }

    /**
     * Bundleにデータ保存する
     */
    @Override
    protected void onSaveInstanceState(
	Bundle outState) {
	super.onSaveInstanceState(outState);
	outState.putString("date_format", mDateFormat);
    }

    /**
     * Bundleより復帰する
     */
    @Override
    protected void onRestoreInstanceState(
	Bundle savedInstanceState) {
	super.onRestoreInstanceState(savedInstanceState);
	mDateFormat = savedInstanceState.getString("date_format");
    }

    /**
     * コンテキストメニューが選択されたとき
     * 
     * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
     */
    public boolean onOptionsItemSelected(
	MenuItem item) {
	switch (item.getItemId()) {
	case R.id.menu_add:
	    Log.i("Main Select Menue Add", "position_week = " + position_week);
	    Intent intent_add = new Intent(this, QueryForm.class);
	    intent_add.putExtra(C.MODE, C.MODE_INSERT);
	    intent_add.putExtra(C.POSITION_WEEK, position_week);
	    intent_add.putExtra(C.TIME_START, Logic001.getNowTime());
	    intent_add.putExtra(C.TIME_END, Logic001.getNowTime(30));
	    startActivity(intent_add);
	    break;
	case R.id.menu_weeklist:
	    Intent intent_weeklist = new Intent(this, ListWeekForm.class);
	    startActivity(intent_weeklist);
	    break;
	case R.id.menu_timelist:
	    Intent intent_timelist = new Intent(this, ListTimeForm.class);
	    intent_timelist.putExtra(C.POSITION_WEEK, position_week);
	    startActivity(intent_timelist);
	    break;
	case R.id.menu_finish:
	    this.finish();
	    break;
	}
	return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onResume() {
	super.onResume();
	Log.d("Main", "onResume()");
	LinearLayout layout = (LinearLayout) findViewById(R.id.chart_area);
	layout.removeAllViews();
	// 強制的に再描画させるために、一旦クリア
	if (mChartView != null) {
	    mChartView = null;
	    logic010.initializing();
	    // 以下が本来望ましい処理
	    // mChartView.repaint();
	    // return;
	}
	// グラフビューを取得
	mChartView = logic010.getGraphicalView();
	// レイアウト調整
	LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
	lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
	layout.addView(mChartView, lp);
    }
}
